// utils/request.js

// API基础路径
const BASE_URL = 'http://localhost:8888'; // 本地开发环境
// const BASE_URL = 'https://api.yourserver.com'; // 生产环境

/**
 * 封装请求方法
 * @param {Object} options 请求选项
 * @returns {Promise} 请求结果Promise
 */
export const request = (options) => {
  return new Promise((resolve, reject) => {
    // 默认选项
    const defaultOptions = {
      url: '',
      method: 'GET',
      data: {},
      header: {
        'Content-Type': 'application/json',
      },
      timeout: 10000,
    };

    // 合并选项
    const requestOptions = {
      ...defaultOptions,
      ...options,
    };

    // 构建完整URL
    requestOptions.url = BASE_URL + requestOptions.url;

    // 添加token到请求头（如果有）
    const token = uni.getStorageSync('token');
    if (token) {
      requestOptions.header['Authorization'] = `Bearer ${token}`;
    }

    // 发起请求
    uni.request({
      ...requestOptions,
      success: (res) => {
        // HTTP状态码处理
        if (res.statusCode >= 200 && res.statusCode < 300) {
          resolve(res.data);
        } else if (res.statusCode === 401) {
          // 未授权，清除token并跳转到登录
          uni.removeStorageSync('token');
          uni.showToast({
            title: '登录已过期，请重新登录',
            icon: 'none',
            duration: 2000,
          });
          setTimeout(() => {
            uni.navigateTo({
              url: '/pages/login/index'
            });
          }, 1000);
          reject(new Error('未授权'));
        } else {
          // 其他错误状态
          uni.showToast({
            title: res.data.message || '请求失败',
            icon: 'none',
            duration: 2000,
          });
          reject(res.data);
        }
      },
      fail: (err) => {
        // 网络请求失败
        uni.showToast({
          title: '网络请求失败',
          icon: 'none',
          duration: 2000,
        });
        reject(err);
      }
    });
  });
};

/**
 * GET请求简化方法
 * @param {String} url 请求地址
 * @param {Object} data 请求参数
 * @param {Object} options 其他选项
 * @returns {Promise} 请求结果Promise
 */
export const get = (url, data = {}, options = {}) => {
  return request({
    url,
    method: 'GET',
    data,
    ...options
  });
};

/**
 * POST请求简化方法
 * @param {String} url 请求地址
 * @param {Object} data 请求参数
 * @param {Object} options 其他选项
 * @returns {Promise} 请求结果Promise
 */
export const post = (url, data = {}, options = {}) => {
  return request({
    url,
    method: 'POST',
    data,
    ...options
  });
};